层次图: 由大到小 RegularTable => PageDataIndex => PageDataNode => PageDataLeaf 最初是一个root PageDataLeaf,当PageDataLeaf很大时会分裂,变成PageDataNode和两个子PageDataLeaf 一个PageDataLeaf页可以放多行记录,先放到内容中保存在PageDataLeaf的rows字段中 添加新行的过程: 先写到内存: org.h2.table.RegularTable.addRow(Session, Row) => org.h2.index.PageDataIndex.add(Session, Row) => org.h2.index.PageDataIndex.addTry(Session, Row) => org.h2.index.PageDataLeaf.addRowTry(Row) => rows = insert(rows, entryCount, x, row); 再写回硬盘: at org.h2.index.PageDataLeaf.write(PageDataLeaf.java:456) at org.h2.store.PageStore.writeBack(PageStore.java:1009) at org.h2.store.PageStore.writeBack(PageStore.java:412) at org.h2.store.PageStore.checkpoint(PageStore.java:430) at org.h2.engine.Database.closeOpenFilesAndUnlock(Database.java:1196) at org.h2.engine.Database.close(Database.java:1149) at org.h2.engine.Database.removeSession(Database.java:1028) at org.h2.engine.Session.close(Session.java:563) at org.h2.server.TcpServerThread.closeSession(TcpServerThread.java:175) at org.h2.server.TcpServerThread.process(TcpServerThread.java:270) at org.h2.server.TcpServerThread.run(TcpServerThread.java:149) at java.lang.Thread.run(Unknown Source) 在org.h2.engine.Database.addMeta(Session, DbObject)中存表元数据 ( /* key:26 */ 14, 0, 0, STRINGDECODE('CREATE CACHED TABLE PUBLIC.TEST(\n ID INT NOT NULL,\n NAME VARCHAR(255)\n)'))